package pe.gob.mininter.dirandro.vaadin.panel.busqueda;

import java.util.List;

import pe.gob.mininter.dirandro.model.Arma;
import pe.gob.mininter.dirandro.model.ModeloMarca;
import pe.gob.mininter.dirandro.model.Opcion;
import pe.gob.mininter.dirandro.service.ArmaService;
import pe.gob.mininter.dirandro.service.ModeloMarcaService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.DirandroComponent;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
public class PanelBuscarArmas extends DirandroComponent implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
	
	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout pnlPrincipal;
	@AutoGenerated
	private Table tblArma;
	@AutoGenerated
	private HorizontalLayout lytFiltro2;
	@AutoGenerated
	private Button btnBuscar;
	@AutoGenerated
	private TextField txtInternamiento;
	@AutoGenerated
	private ComboBoxLOVS cmbCalibre;
	@AutoGenerated
	private HorizontalLayout lytFiltro1;
	@AutoGenerated
	private ComboBoxLOVS cmbEstadoSerie;
	@AutoGenerated
	private TextField txtNumeroSerie;
	@AutoGenerated
	private ComboBox cmbModelo;
	private ModeloMarcaService modeloMarcaService;
	private ArmaService armaService;
	
	private static final String COLUMN_ID = "COLUMN_ID";
	private static final String COLUMN_MODELO = "COLUMN_MODELO";
	private static final String COLUMN_EST_SERIE = "COLUMN_EST_SERIE";
	private static final String COLUMN_NRO_SERIE = "COLUMN_NRO_SERIE";
	private static final String COLUMN_CALIBRE = "COLUMN_CALIBRE";
	private static final String COLUMN_INTERNAMIENTO = "COLUMN_INTERNAMIENTO";
	
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public PanelBuscarArmas(List<Opcion> acciones, String height) {
		super(acciones, height);
		buildMainLayout();
		modeloMarcaService = Injector.obtenerServicio(ModeloMarcaService.class);
		armaService = Injector.obtenerServicio(ArmaService.class);
		setCompositionRoot(mainLayout);
		postConstruct();
		debugId();
	}
	
	private void debugId(){
		
	}
	
	public void postConstruct() {
		List<ModeloMarca> modeloMarcas=modeloMarcaService.buscarHijos(new ModeloMarca(Constante.MODELO_MARCA.ARMAS.TIPOS));
		cmbModelo.setInputPrompt("Modelo");
		cmbModelo.setItemCaptionPropertyId("nombre");
		cmbModelo.setContainerDataSource(new BeanItemContainer<ModeloMarca>(ModeloMarca.class,  modeloMarcas));
		txtNumeroSerie.setInputPrompt("Nro Serie");
		cmbEstadoSerie.setInputPrompt("Estado Serie");
		cmbEstadoSerie.setCodigoLista(Constante.LISTA.CODIGO.ARMA_ESTADO_SERIE);
		cmbCalibre.setInputPrompt("Calibre");
		cmbCalibre.setCodigoLista(Constante.LISTA.CODIGO.TIPO_CALIBRE);
		txtInternamiento.setInputPrompt("Internamiento");
		
		btnBuscar.addListener(this);
		
		tblArma.setColumnCollapsingAllowed(true);
		cargarTabla(null);
	}
	
		
	private void cargarTabla(List<Arma> armas)
	{
		IndexedContainer container = new IndexedContainer();
        
        container.addContainerProperty(COLUMN_ID, Long.class,  null);
        container.addContainerProperty(COLUMN_MODELO, String.class,  null);
        container.addContainerProperty(COLUMN_EST_SERIE, String.class,  null);
        container.addContainerProperty(COLUMN_NRO_SERIE, String.class,  null);
        container.addContainerProperty(COLUMN_CALIBRE, String.class,  null);
        container.addContainerProperty(COLUMN_INTERNAMIENTO, String.class,  null);
        
        if(armas!=null){
	        int con=1;
	        for (Arma arma: armas) {
	                Item item = container.addItem(con++);
				    item.getItemProperty(COLUMN_ID).setValue(arma.getId());
				    item.getItemProperty(COLUMN_MODELO).setValue(arma.getModelo()!=null ? 
				    		arma.getModelo().getNombre() : null);
				    item.getItemProperty(COLUMN_EST_SERIE).setValue(arma.getEstadoSerie()!=null ? 
				    		arma.getEstadoSerie().getNombre() : null);
				    item.getItemProperty(COLUMN_NRO_SERIE).setValue(arma.getNroSerie());
				    item.getItemProperty(COLUMN_CALIBRE).setValue(arma.getCalibre()!=null ? 
				    		arma.getCalibre().getNombre() : null);
				    item.getItemProperty(COLUMN_INTERNAMIENTO).setValue(arma.getInternamiento());
	        }
        }
        
        tblArma.setContainerDataSource(container);
        tblArma.setVisibleColumns(new Object[]{COLUMN_MODELO, COLUMN_EST_SERIE, 
        		COLUMN_NRO_SERIE, COLUMN_CALIBRE, COLUMN_INTERNAMIENTO});
        tblArma.setColumnWidth(COLUMN_MODELO, 100);
        tblArma.setColumnWidth(COLUMN_EST_SERIE, 100);
        tblArma.setColumnWidth(COLUMN_NRO_SERIE, 100);
        tblArma.setColumnWidth(COLUMN_CALIBRE, 100);
        tblArma.setColumnWidth(COLUMN_INTERNAMIENTO, 100);
        tblArma.setColumnHeader(COLUMN_MODELO, "Modelo");
        tblArma.setColumnHeader(COLUMN_EST_SERIE, "Estado");
        tblArma.setColumnHeader(COLUMN_NRO_SERIE, "Nro Serie");
        tblArma.setColumnHeader(COLUMN_CALIBRE, "Calibre");
        tblArma.setColumnHeader(COLUMN_INTERNAMIENTO, "Internamiento");
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnBuscar)){
			Arma arma=new Arma();
			arma.setModelo((ModeloMarca)cmbModelo.getValue());
			arma.setEstadoSerie(cmbEstadoSerie.getValor());
			arma.setNroSerie((String)txtNumeroSerie.getValue());
			arma.setCalibre(cmbCalibre.getValor());
			arma.setInternamiento((String)txtInternamiento.getValue());
			cargarTabla(armaService.buscar(arma));
		}
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// pnlPrincipal
		pnlPrincipal = buildPnlPrincipal();
		mainLayout.addComponent(pnlPrincipal);
		mainLayout.setComponentAlignment(pnlPrincipal, new Alignment(20));
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildPnlPrincipal() {
		// common part: create layout
		pnlPrincipal = new VerticalLayout();
		pnlPrincipal.setStyleName("whiteBackGround");
		pnlPrincipal.setImmediate(false);
		pnlPrincipal.setWidth("800px");
		pnlPrincipal.setHeight("-1px");
		pnlPrincipal.setMargin(true);
		pnlPrincipal.setSpacing(true);
		
		// lytFiltro1
		lytFiltro1 = buildLytFiltro1();
		pnlPrincipal.addComponent(lytFiltro1);
		
		// lytFiltro2
		lytFiltro2 = buildLytFiltro2();
		pnlPrincipal.addComponent(lytFiltro2);
		
		// tblArma
		tblArma = new Table();
		tblArma.setImmediate(false);
		tblArma.setWidth("730px");
		tblArma.setHeight("350px");
		pnlPrincipal.addComponent(tblArma);
		
		return pnlPrincipal;
	}

	@AutoGenerated
	private HorizontalLayout buildLytFiltro1() {
		// common part: create layout
		lytFiltro1 = new HorizontalLayout();
		lytFiltro1.setImmediate(false);
		lytFiltro1.setWidth("-1px");
		lytFiltro1.setHeight("-1px");
		lytFiltro1.setMargin(false);
		lytFiltro1.setSpacing(true);
		
		// cmbModelo
		cmbModelo = new ComboBox();
		cmbModelo.setImmediate(false);
		cmbModelo.setWidth("150px");
		cmbModelo.setHeight("-1px");
		lytFiltro1.addComponent(cmbModelo);
		
		// txtNumeroSerie
		txtNumeroSerie = new TextField();
		txtNumeroSerie.setImmediate(false);
		txtNumeroSerie.setWidth("150px");
		txtNumeroSerie.setHeight("-1px");
		lytFiltro1.addComponent(txtNumeroSerie);
		
		// cmbEstadoSerie
		cmbEstadoSerie = new ComboBoxLOVS();
		cmbEstadoSerie.setImmediate(false);
		cmbEstadoSerie.setWidth("150px");
		cmbEstadoSerie.setHeight("-1px");
		lytFiltro1.addComponent(cmbEstadoSerie);
		
		return lytFiltro1;
	}

	@AutoGenerated
	private HorizontalLayout buildLytFiltro2() {
		// common part: create layout
		lytFiltro2 = new HorizontalLayout();
		lytFiltro2.setImmediate(false);
		lytFiltro2.setWidth("-1px");
		lytFiltro2.setHeight("-1px");
		lytFiltro2.setMargin(false);
		lytFiltro2.setSpacing(true);
		
		// cmbCalibre
		cmbCalibre = new ComboBoxLOVS();
		cmbCalibre.setImmediate(false);
		cmbCalibre.setWidth("150px");
		cmbCalibre.setHeight("-1px");
		lytFiltro2.addComponent(cmbCalibre);
		
		// txtInternamiento
		txtInternamiento = new TextField();
		txtInternamiento.setImmediate(false);
		txtInternamiento.setWidth("150px");
		txtInternamiento.setHeight("-1px");
		lytFiltro2.addComponent(txtInternamiento);
		
		// btnBuscar
		btnBuscar = new Button();
		btnBuscar.setCaption("Buscar");
		btnBuscar.setImmediate(true);
		btnBuscar.setWidth("-1px");
		btnBuscar.setHeight("-1px");
		lytFiltro2.addComponent(btnBuscar);
		
		return lytFiltro2;
	}	

}
